package Echart

import (
	"WebSvr/modules/common"
	"errors"
	"time"
)

const minute_secs int64 = 60
const hour_secs int64 = 60 * 60

type itime2xAxis interface {
	time2xAxisSub(st string, ed string)
}

type basetime2xAxis struct {
	tmStamp_st int64
	tmStamp_ed int64
}

func (baset2xAxis *basetime2xAxis) time2xAxisSub(st string, ed string) {
	tm_st, _ := time.ParseInLocation(common.TimeModel, st, time.Local)
	tm_ed, _ := time.ParseInLocation(common.TimeModel, ed, time.Local)
	baset2xAxis.tmStamp_st = tm_st.Unix()
	baset2xAxis.tmStamp_ed = tm_ed.Unix()
	if baset2xAxis.tmStamp_st > baset2xAxis.tmStamp_ed {
		baset2xAxis.tmStamp_st, baset2xAxis.tmStamp_ed = baset2xAxis.tmStamp_ed, baset2xAxis.tmStamp_st
	}
}

type time2xAxis_sec struct {
	basetime2xAxis
	secSlice []string
}

func (t2xAxisSec *time2xAxis_sec) time2xAxisSub(st string, ed string) {
	t2xAxisSec.basetime2xAxis.time2xAxisSub(st, ed)
	secs := t2xAxisSec.basetime2xAxis.tmStamp_ed - t2xAxisSec.basetime2xAxis.tmStamp_st + 1
	t2xAxisSec.secSlice = make([]string, secs, secs+1)
	var index int64
	for index = 0; index < secs; index++ {
		tm := t2xAxisSec.basetime2xAxis.tmStamp_st + index
		dataTimeStr := time.Unix(tm, 0).Format(common.TimeModel)
		t2xAxisSec.secSlice[index] = dataTimeStr
	}
}

type time2xAxis_minutes struct {
	basetime2xAxis
	minuteSlice []string
}

func (time2xAxis_m *time2xAxis_minutes) time2xAxisSub(st string, ed string) {
	time2xAxis_m.basetime2xAxis.time2xAxisSub(st, ed)
	var minutes int64
	minutes = (time2xAxis_m.basetime2xAxis.tmStamp_ed-time2xAxis_m.basetime2xAxis.tmStamp_st)/minute_secs + 1
	time2xAxis_m.minuteSlice = make([]string, minutes, minutes+1)
	var index int64
	for index = 0; index < minutes; index++ {
		tm := time2xAxis_m.basetime2xAxis.tmStamp_st + (index)*minute_secs
		dataTimeStr := time.Unix(tm, 0).Format(common.TimeModel)
		time2xAxis_m.minuteSlice[index] = dataTimeStr
	}
}

type time2xAxis_hour struct {
	basetime2xAxis
	hourSlice []string
}

func (time2xAxis_h *time2xAxis_hour) time2xAxisSub(st string, ed string) {
	time2xAxis_h.basetime2xAxis.time2xAxisSub(st, ed)
	var hours int64
	hours = (time2xAxis_h.basetime2xAxis.tmStamp_ed-time2xAxis_h.basetime2xAxis.tmStamp_st)/hour_secs + 1
	time2xAxis_h.hourSlice = make([]string, hours, hours+1)
	var index int64
	for index = 0; index < hours; index++ {
		tm := time2xAxis_h.basetime2xAxis.tmStamp_st + (index)*hour_secs
		dataTimeStr := time.Unix(tm, 0).Format(common.TimeModel)
		time2xAxis_h.hourSlice[index] = dataTimeStr
	}
	len_hourSlice := len(time2xAxis_h.hourSlice)

	if time2xAxis_h.hourSlice[len_hourSlice-1] != ed {
		time2xAxis_h.hourSlice = append(time2xAxis_h.hourSlice, ed)
	}

}

func interface_time2xAxis(i itime2xAxis, st string, ed string) {
	i.time2xAxisSub(st, ed)
}

//建立echart横轴
func createxAxisSubData(selType int32, startTime string, endTime string) ([]string, error) {
	switch selType {
	case common.SEL_SEC:
		pbase := new(time2xAxis_sec)
		interface_time2xAxis(pbase, startTime, endTime)
		return pbase.secSlice, nil
	case common.SEL_MIN:
		pbase := new(time2xAxis_minutes)
		interface_time2xAxis(pbase, startTime, endTime)
		return pbase.minuteSlice, nil
	case common.SEL_HOUR:
		pbase := new(time2xAxis_hour)
		interface_time2xAxis(pbase, startTime, endTime)
		return pbase.hourSlice, nil
	default:
		//丢出错误
		return nil, errors.New("客户端传来的SelType错误") //生成一个简单的 error 类型
	}

}
